﻿#pragma warning disable IDE1006
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WUDI.ECharts.Geo
{
	/// <summary>
	/// 地理坐标系组件
	/// <para>
	/// 地理坐标系组件用于地图的绘制，支持在地理坐标系上绘制线集
	/// </para>
	/// <para>
	/// #series-lines
	/// </para>
	/// <para>
	/// 3.1.10 开始 geo 组件也支持鼠标事件
	/// </para>
	/// <para>
	/// 事件参数为
	/// </para>
	/// <para>
	/// Tip:
	/// </para>
	/// <para>
	/// geo 区域的颜色也可以被 map series 所控制，参见 series-map.geoIndex
	/// </para>
	/// <para>
	/// #series-map.geoIndex
	/// </para>
	/// </summary>
	public class Geo
	{

		/// <summary>
		/// 组件 ID。默认不指定。指定则可用于在 option 或者 API 中引用组件。
		/// </summary>
		public dynamic id { get; set; } 

		/// <summary>
		/// 是否显示地理坐标系组件。
		/// </summary>
		public dynamic show { get; set; }  = true;

		/// <summary>
		/// 地图类型
		/// <para>
		/// ECharts 3 中因为地图精度的提高，不再内置地图数据增大代码体积，你可以在地图下载界面
		/// </para>
		/// <para>
		/// <see href="http://ecomfe.github.io/echarts-builder-web/map3.html"/>下载到需要的地图文件引入并注册到 ECharts 中
		/// </para>
		/// <para>
		/// ECharts 中提供了两种格式的地图数据，一种是可以直接 script 标签引入的 js 文件，引入后会自动注册地图名字和数据
		/// </para>
		/// <para>
		/// 还有一种是 JSON 文件，需要通过 AJAX 异步加载后手动注册
		/// </para>
		/// <para>
		/// JavaScript 引入示例
		/// </para>
		/// <para>
		/// JSON 引入示例
		/// </para>
		/// <para>
		/// ECharts 使用 USA Population Estimates
		/// </para>
		/// <para>
		/// <see href="https://echarts.apache.org/examples/zh/editor.html?c=map-usa"/>
		/// </para>
		/// </summary>
		public WUDI.ECharts.Map map { get; set; }  = WUDI.ECharts.Map.;

		/// <summary>
		/// 是否开启鼠标缩放和平移漫游
		/// <para>
		/// 默认不开启
		/// </para>
		/// <para>
		/// 如果只想要开启缩放或者平移，可以设置成 scale 或者 move
		/// </para>
		/// <para>
		/// 设置成 true 为都开启
		/// </para>
		/// </summary>
		public dynamic roam { get; set; }  = false;

		/// <summary>
		/// 当前视角的中心点，用经纬度表示
		/// </summary>
		public dynamic center { get; set; } 

		/// <summary>
		/// 这个参数用于 scale 地图的长宽比
		/// <para>
		/// 最终的 aspect 的计算方式是
		/// </para>
		/// <para>
		/// geoBoundingRect.width / geoBoundingRect.height * aspectScale
		/// </para>
		/// </summary>
		public dynamic aspectScale { get; set; }  = 0.75;

		/// <summary>
		/// 二维数组，定义定位的左上角以及右下角分别所对应的经纬度。例如
		/// </summary>
		public dynamic boundingCoords { get; set; } 

		/// <summary>
		/// 当前视角的缩放比例。
		/// </summary>
		public dynamic zoom { get; set; }  = 1;

		/// <summary>
		/// 滚轮缩放的极限控制，通过min, max最小和最大的缩放值，默认的缩放为1。
		/// </summary>
		public WUDI.ECharts.Geo.ScaleLimit scaleLimit { get; set; } 

		public WUDI.ECharts.NameMap nameMap { get; set; } 

		/// <summary>
		/// 从 v4.8.0 开始支持
		/// <para>
		/// 默认是 name，针对 GeoJSON 要素的自定义属性名称，作为主键用于关联数据点和 GeoJSON 地理要素
		/// </para>
		/// </summary>
		public dynamic nameProperty { get; set; }  = "name";

		/// <summary>
		/// 选中模式，表示是否支持多个选中，默认关闭，支持布尔值和字符串，字符串取值可选single表示单选，或者multiple表示多选。
		/// </summary>
		public dynamic selectedMode { get; set; }  = false;

		/// <summary>
		/// 图形上的文本标签，可用于说明图形的一些数据信息，比如值，名称等，label选项在 ECharts 2.x 中放置于itemStyle下，在 ECharts 3 中为了让整个配置项结构更扁平合理，label 被拿出来跟 itemStyle 平级，并且跟 itemStyle 一样拥有 emphasis 状态。
		/// </summary>
		public WUDI.ECharts.Geo.Label label { get; set; } 

		/// <summary>
		/// 地图区域的多边形 图形样式。
		/// </summary>
		public WUDI.ECharts.Geo.ItemStyle itemStyle { get; set; } 

		/// <summary>
		/// 高亮状态下的多边形和标签样式。
		/// </summary>
		public WUDI.ECharts.Geo.Emphasis.Emphasis emphasis { get; set; } 

		/// <summary>
		/// 所有图形的 zlevel 值
		/// <para>
		/// zlevel用于 Canvas 分层，不同zlevel值的图形会放置在不同的 Canvas 中，Canvas 分层是一种常见的优化手段
		/// </para>
		/// <para>
		/// 我们可以把一些图形变化频繁（例如有动画）的组件设置成一个单独的zlevel
		/// </para>
		/// <para>
		/// 需要注意的是过多的 Canvas 会引起内存开销的增大，在手机端上需要谨慎使用以防崩溃
		/// </para>
		/// <para>
		/// zlevel 大的 Canvas 会放在 zlevel 小的 Canvas 的上面
		/// </para>
		/// </summary>
		public dynamic zlevel { get; set; }  = 0;

		/// <summary>
		/// 组件的所有图形的z值
		/// <para>
		/// 控制图形的前后顺序
		/// </para>
		/// <para>
		/// z值小的图形会被z值大的图形覆盖
		/// </para>
		/// <para>
		/// z相比zlevel优先级更低，而且不会创建新的 Canvas
		/// </para>
		/// </summary>
		public dynamic z { get; set; }  = 2;

		/// <summary>
		/// 组件离容器左侧的距离
		/// <para>
		/// left 的值可以是像 20 这样的具体像素值，可以是像 20% 这样相对于容器高宽的百分比，也可以是 left, center, right
		/// </para>
		/// <para>
		/// 如果 left 的值为left, center, right，组件会根据相应的位置自动对齐
		/// </para>
		/// </summary>
		public dynamic left { get; set; }  = "auto";

		/// <summary>
		/// 组件离容器上侧的距离
		/// <para>
		/// top 的值可以是像 20 这样的具体像素值，可以是像 20% 这样相对于容器高宽的百分比，也可以是 top, middle, bottom
		/// </para>
		/// <para>
		/// 如果 top 的值为top, middle, bottom，组件会根据相应的位置自动对齐
		/// </para>
		/// </summary>
		public dynamic top { get; set; }  = "auto";

		/// <summary>
		/// 组件离容器右侧的距离
		/// <para>
		/// right 的值可以是像 20 这样的具体像素值，可以是像 20% 这样相对于容器高宽的百分比
		/// </para>
		/// <para>
		/// 默认自适应
		/// </para>
		/// </summary>
		public dynamic right { get; set; }  = "auto";

		/// <summary>
		/// 组件离容器下侧的距离
		/// <para>
		/// bottom 的值可以是像 20 这样的具体像素值，可以是像 20% 这样相对于容器高宽的百分比
		/// </para>
		/// <para>
		/// 默认自适应
		/// </para>
		/// </summary>
		public dynamic bottom { get; set; }  = "auto";

		/// <summary>
		/// layoutCenter 和 layoutSize 提供了除了 left/right/top/bottom/width/height 之外的布局手段
		/// <para>
		/// 在使用 left/right/top/bottom/width/height 的时候，可能很难在保持地图高宽比的情况下把地图放在某个盒形区域的正中间，并且保证不超出盒形的范围
		/// </para>
		/// <para>
		/// 此时可以通过 layoutCenter 属性定义地图中心在屏幕中的位置，layoutSize 定义地图的大小
		/// </para>
		/// <para>
		/// 如下示例
		/// </para>
		/// <para>
		/// 设置这两个值后 left/right/top/bottom/width/height 无效
		/// </para>
		/// </summary>
		public dynamic layoutCenter { get; set; } 

		/// <summary>
		/// 地图的大小，见 layoutCenter。支持相对于屏幕宽高的百分比或者绝对的像素大小。
		/// </summary>
		public dynamic layoutSize { get; set; } 

		/// <summary>
		/// 图形是否不响应和触发鼠标事件，默认为 false，即响应和触发鼠标事件。
		/// </summary>
		public dynamic silent { get; set; }  = false;

	}
}